
package org.apache.ibatis.type;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * mybatis在预处理语句（PreparedStatement）中设置一个参数时，或者从结果集（ResultSet）中取出一个值时，
 * 都会用到TypeHandler。它的作用就是将java类型（javaType）转化为jdbc类型（jdbcType），
 * 或者将jdbc类型（jdbcType）转化为java类型（javaType）
*/
public interface TypeHandler<T> {

    //通过preparedStatement对象设置参数，将T类型的数据存入数据库
  void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException;

  //通过列名获取数据
  T getResult(ResultSet rs, String columnName) throws SQLException;

  //通过下标名获取数据
  T getResult(ResultSet rs, int columnIndex) throws SQLException;

  //通过CallableStatement获取数据
  //CallableStatement主要是调用数据库中的存储过程
  T getResult(CallableStatement cs, int columnIndex) throws SQLException;

}
